PyPI के माध्यम से पाइथन पैकेज वितरित करने की एक व्यापक गाइड, जो वैश्विक डेवलपर्स के लिए संस्करण प्रबंधन, टूलिंग और वर्कफ़्लो को कवर करती है।
पाइथन पैकेज वितरण: PyPI पब्लिशिंग और संस्करण प्रबंधन
पाइथन का विशाल इकोसिस्टम पैकेजों के एक बड़े संग्रह द्वारा संचालित है, जो पाइथन पैकेज इंडेक्स (PyPI) के माध्यम से आसानी से उपलब्ध हैं। यह गाइड आपके अपने पाइथन पैकेजों को PyPI के माध्यम से वितरित करने का एक व्यापक अवलोकन प्रदान करता है, यह सुनिश्चित करता है कि वे दुनिया भर के डेवलपर्स के लिए सुलभ हों। हम आवश्यक उपकरणों, संस्करण प्रबंधन के लिए सर्वोत्तम प्रथाओं और उच्च-गुणवत्ता वाले पाइथन पैकेज बनाने और प्रकाशित करने के लिए वर्कफ़्लो का पता लगाएंगे।
अपना पाइथन पैकेज क्यों वितरित करें?
अपने पाइथन पैकेज को वितरित करने से कई लाभ मिलते हैं:
- अपना काम साझा करना: अन्य डेवलपर्स को आसानी से आपके कोड का पुन: उपयोग करने की अनुमति देता है, जिससे सहयोग और नवाचार को बढ़ावा मिलता है। कल्पना कीजिए कि एक वैश्विक टीम पाइथन में बनाए गए आपके विशेष डेटा विश्लेषण टूल का उपयोग कर रही है।
- डिपेंडेंसी प्रबंधन: अन्य परियोजनाओं में डिपेंडेंसी के प्रबंधन की प्रक्रिया को सरल बनाता है। आपके पैकेज को एक ही कमांड से उसकी सभी डिपेंडेंसी के साथ इंस्टॉल किया जा सकता है।
- ओपन-सोर्स में योगदान: आपको ओपन-सोर्स समुदाय में योगदान करने और अपने काम के लिए पहचान हासिल करने में सक्षम बनाता है। कई महत्वपूर्ण सॉफ्टवेयर घटक दुनिया भर के डेवलपर्स द्वारा बनाए गए ओपन-सोर्स पैकेज हैं।
- संस्करण नियंत्रण और अपडेट: संस्करणों को प्रबंधित करने, अपडेट जारी करने और बग फिक्स को संबोधित करने का एक संरचित तरीका प्रदान करता है। यह सुनिश्चित करता है कि उपयोगकर्ताओं के पास हमेशा आपके पैकेज का नवीनतम और सबसे विश्वसनीय संस्करण उपलब्ध हो।
- आसान इंस्टॉलेशन: उपयोगकर्ताओं के लिए
pip install your-package-nameके माध्यम से इंस्टॉलेशन को सरल बनाता है।
पाइथन पैकेज वितरण के लिए आवश्यक उपकरण
पाइथन पैकेज बनाने और वितरित करने के लिए कई उपकरण आवश्यक हैं:
- setuptools: पैकेज मेटाडेटा को परिभाषित करने के लिए एक व्यापक रूप से उपयोग की जाने वाली लाइब्रेरी, जिसमें नाम, संस्करण, डिपेंडेंसी और एंट्री पॉइंट शामिल हैं। यह पाइथन परियोजनाओं की पैकेजिंग के लिए वास्तविक मानक है।
- wheel: एक वितरण प्रारूप जो स्रोत वितरण की तुलना में अधिक कुशल और विश्वसनीय इंस्टॉलेशन प्रक्रिया प्रदान करता है। व्हील्स पहले से बने वितरण होते हैं जिन्हें संकलन की आवश्यकता के बिना इंस्टॉल किया जा सकता है।
- twine: आपके पैकेज को PyPI पर सुरक्षित रूप से अपलोड करने का एक उपकरण। ट्विन आपके क्रेडेंशियल्स और पैकेज डेटा को ट्रांसमिशन के दौरान एन्क्रिप्ट करता है, जो ईव्सड्रॉपिंग और मैन-इन-द-मिडिल हमलों से बचाता है।
- venv/virtualenv: ये अलग-थलग पाइथन वातावरण बनाने के उपकरण हैं। डिपेंडेंसी को प्रबंधित करने और विभिन्न परियोजनाओं के बीच टकराव से बचने के लिए वर्चुअल वातावरण का उपयोग करना महत्वपूर्ण है।
अपना प्रोजेक्ट सेट अप करना
इससे पहले कि आप अपना पैकेज वितरित कर सकें, आपको अपनी परियोजना को सही ढंग से संरचित करने की आवश्यकता है।
प्रोजेक्ट संरचना का उदाहरण
my_package/ ├── my_package/ │ ├── __init__.py │ ├── module1.py │ └── module2.py ├── tests/ │ ├── __init__.py │ ├── test_module1.py │ └── test_module2.py ├── README.md ├── LICENSE ├── setup.py └── .gitignore
स्पष्टीकरण:
- my_package/: मुख्य डायरेक्टरी जिसमें आपके पैकेज का स्रोत कोड है।
- my_package/__init__.py: `my_package` डायरेक्टरी को एक पाइथन पैकेज बनाता है। यह खाली हो सकता है या इसमें इनिशियलाइज़ेशन कोड हो सकता है।
- my_package/module1.py, my_package/module2.py: आपके पाइथन मॉड्यूल जिनमें वास्तविक कोड है।
- tests/: आपके यूनिट परीक्षणों वाली एक डायरेक्टरी। आपके पैकेज की गुणवत्ता और विश्वसनीयता सुनिश्चित करने के लिए परीक्षण लिखना महत्वपूर्ण है।
- README.md: एक मार्कडाउन फ़ाइल जो आपके पैकेज का विवरण, उपयोग के निर्देश और अन्य प्रासंगिक जानकारी प्रदान करती है। यह अक्सर पहली चीज़ होती है जिसे उपयोगकर्ता PyPI पर देखते हैं।
- LICENSE: एक फ़ाइल जिसमें वह लाइसेंस होता है जिसके तहत आपका पैकेज वितरित किया जाता है (जैसे, MIT, Apache 2.0, GPL)। यह निर्दिष्ट करने के लिए कि अन्य लोग आपके कोड का उपयोग कैसे कर सकते हैं, एक उपयुक्त लाइसेंस चुनना आवश्यक है।
- setup.py: मुख्य कॉन्फ़िगरेशन फ़ाइल जो आपके पैकेज के मेटाडेटा और निर्माण निर्देशों को परिभाषित करती है।
- .gitignore: उन फ़ाइलों और डायरेक्टरी को निर्दिष्ट करता है जिन्हें Git द्वारा अनदेखा किया जाना चाहिए (जैसे, अस्थायी फ़ाइलें, बिल्ड आर्टिफैक्ट्स)।
`setup.py` फ़ाइल बनाना
`setup.py` फ़ाइल आपके पैकेज वितरण का केंद्र है। इसमें आपके पैकेज के बारे में मेटाडेटा और इसे बनाने और स्थापित करने के निर्देश होते हैं। यहाँ एक उदाहरण है:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="my_package", # अपने पैकेज के नाम से बदलें
version="0.1.0",
author="Your Name", # अपने नाम से बदलें
author_email="your.email@example.com", # अपने ईमेल से बदलें
description="एक छोटा उदाहरण पैकेज",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/yourusername/my_package", # अपने रिपॉजिटरी यूआरएल से बदलें
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
install_requires=[
"requests", # उदाहरण डिपेंडेंसी
],
)
स्पष्टीकरण:
- name: आपके पैकेज का नाम, जिसका उपयोग PyPI पर किया जाएगा। एक अद्वितीय और वर्णनात्मक नाम चुनें।
- version: आपके पैकेज का संस्करण संख्या। सिमेंटिक वर्जनिंग का पालन करें (नीचे देखें)।
- author, author_email: आपका नाम और ईमेल पता।
- description: आपके पैकेज का एक संक्षिप्त विवरण।
- long_description: एक लंबा, अधिक विस्तृत विवरण, जिसे आमतौर पर आपकी `README.md` फ़ाइल से पढ़ा जाता है।
- long_description_content_type: आपके लंबे विवरण का प्रारूप निर्दिष्ट करता है (जैसे, "text/markdown")।
- url: आपके पैकेज के होमपेज का URL (जैसे, GitHub रिपॉजिटरी)।
- packages: आपके वितरण में शामिल किए जाने वाले पैकेजों की एक सूची। `setuptools.find_packages()` स्वचालित रूप से आपकी परियोजना के सभी पैकेजों को खोज लेता है।
- classifiers: मेटाडेटा जो उपयोगकर्ताओं को PyPI पर आपका पैकेज खोजने में मदद करता है। ट्रोव क्लासिफायर की सूची से उपयुक्त क्लासिफायर चुनें। समर्थित पाइथन संस्करणों, ऑपरेटिंग सिस्टम और लाइसेंस के लिए क्लासिफायर शामिल करने पर विचार करें।
- python_requires: आपके पैकेज का उपयोग करने के लिए आवश्यक न्यूनतम पाइथन संस्करण निर्दिष्ट करता है।
- install_requires: उन डिपेंडेंसी की सूची जिनकी आपके पैकेज को आवश्यकता है। ये डिपेंडेंसी आपके पैकेज को इंस्टॉल किए जाने पर स्वचालित रूप से इंस्टॉल हो जाएंगी।
संस्करण प्रबंधन: सिमेंटिक वर्जनिंग
सिमेंटिक वर्जनिंग (SemVer) एक व्यापक रूप से अपनाई गई वर्जनिंग योजना है जो आपके पैकेज में परिवर्तनों की प्रकृति को संप्रेषित करने का एक स्पष्ट और सुसंगत तरीका प्रदान करती है।
एक SemVer संस्करण संख्या में तीन भाग होते हैं: MAJOR.MINOR.PATCH।
- MAJOR: जब आप असंगत API परिवर्तन करते हैं तो इसे बढ़ाया जाता है। यह एक महत्वपूर्ण परिवर्तन को इंगित करता है जिसके लिए उपयोगकर्ताओं को अपना कोड अपडेट करने की आवश्यकता हो सकती है।
- MINOR: जब आप पिछड़े-संगत तरीके से कार्यक्षमता जोड़ते हैं तो इसे बढ़ाया जाता है। यह नई सुविधाओं या सुधारों को दर्शाता है जो मौजूदा कोड को नहीं तोड़ते हैं।
- PATCH: जब आप पिछड़े-संगत बग फिक्स करते हैं तो इसे बढ़ाया जाता है। यह छोटे सुधारों के लिए है जो नई सुविधाएँ नहीं जोड़ते हैं या मौजूदा कार्यक्षमता को नहीं तोड़ते हैं।
उदाहरण:
- 1.0.0: प्रारंभिक रिलीज।
- 1.1.0: मौजूदा कोड को तोड़े बिना एक नई सुविधा जोड़ी गई।
- 1.0.1: 1.0.0 रिलीज में एक बग को ठीक किया गया।
- 2.0.0: असंगत API परिवर्तन किए गए।
SemVer का उपयोग करने से उपयोगकर्ताओं को आपके पैकेज के नए संस्करण में अपग्रेड करने के प्रभाव को समझने में मदद मिलती है।
अपना पैकेज बनाना
एक बार जब आप अपनी `setup.py` फ़ाइल को कॉन्फ़िगर कर लेते हैं, तो आप अपना पैकेज बना सकते हैं।
- एक वर्चुअल वातावरण बनाएं: अपने पैकेज की डिपेंडेंसी को अलग करने के लिए एक वर्चुअल वातावरण बनाने की अत्यधिक अनुशंसा की जाती है। `python3 -m venv .venv` (या `virtualenv .venv`) का उपयोग करें और फिर इसे सक्रिय करें (Linux/macOS पर `source .venv/bin/activate`, Windows पर `.venv\Scripts\activate`)।
- बिल्ड डिपेंडेंसी इंस्टॉल करें: `pip install --upgrade setuptools wheel` चलाएँ।
- पैकेज बनाएँ: `python setup.py sdist bdist_wheel` चलाएँ। यह कमांड `dist` डायरेक्टरी में दो वितरण फ़ाइलें बनाता है: एक स्रोत वितरण (sdist) और एक व्हील वितरण (bdist_wheel)।
`sdist` में आपका स्रोत कोड और `setup.py` फ़ाइल होती है। `bdist_wheel` एक पहले से बना हुआ वितरण है जिसे अधिक तेज़ी से स्थापित किया जा सकता है।
अपना पैकेज PyPI पर प्रकाशित करना
इससे पहले कि आप अपना पैकेज प्रकाशित कर सकें, आपको PyPI (https://pypi.org/) पर एक खाता बनाना होगा और एक API टोकन बनाना होगा। इस टोकन का उपयोग आपके अपलोड को प्रमाणित करने के लिए किया जाएगा।
- PyPI पर पंजीकरण करें: https://pypi.org/account/register/ पर जाएं और एक खाता बनाएं।
- एक API टोकन बनाएं: https://pypi.org/manage/account/ पर जाएं, "API टोकन" अनुभाग तक स्क्रॉल करें, और एक नया टोकन बनाएं। इस टोकन को सुरक्षित रूप से संग्रहीत करें, क्योंकि आपको अपना पैकेज अपलोड करने के लिए इसकी आवश्यकता होगी।
- Twine इंस्टॉल करें: `pip install twine` चलाएँ।
- अपना पैकेज अपलोड करें: `twine upload dist/*` चलाएँ। आपसे आपके उपयोगकर्ता नाम (
__token__) और पासवर्ड (आपके द्वारा बनाया गया API टोकन) के लिए पूछा जाएगा।
महत्वपूर्ण सुरक्षा नोट: कभी भी अपने API टोकन को अपनी रिपॉजिटरी में कमिट न करें। इसे सुरक्षित रूप से संग्रहीत करें और अपलोड प्रक्रिया के दौरान इसे एक्सेस करने के लिए पर्यावरण चर या अन्य सुरक्षित तरीकों का उपयोग करें।
अपने पैकेज इंस्टॉलेशन का परीक्षण करना
अपना पैकेज प्रकाशित करने के बाद, यह परीक्षण करना आवश्यक है कि इसे सही ढंग से इंस्टॉल किया जा सकता है।
- एक नया वर्चुअल वातावरण बनाएं: यह सुनिश्चित करता है कि आप एक स्वच्छ वातावरण में इंस्टॉलेशन का परीक्षण कर रहे हैं।
- अपना पैकेज इंस्टॉल करें: `pip install your-package-name` चलाएँ।
- अपने पैकेज को आयात और उपयोग करें: एक पाइथन इंटरप्रेटर में, अपने पैकेज को आयात करें और सत्यापित करें कि यह अपेक्षा के अनुरूप काम करता है।
सतत एकीकरण और सतत परिनियोजन (CI/CD)
अपने पैकेज को बनाने, परीक्षण करने और प्रकाशित करने की प्रक्रिया को स्वचालित करने के लिए, आप GitHub Actions, GitLab CI, या Travis CI जैसे CI/CD टूल का उपयोग कर सकते हैं।
यहाँ एक GitHub Actions वर्कफ़्लो का एक उदाहरण है जो आपके पैकेज को बनाता है और PyPI पर प्रकाशित करता है:
name: PyPI पर प्रकाशित करें
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Python 3.x सेट अप करें
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: डिपेंडेंसी इंस्टॉल करें
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
- name: पैकेज बनाएँ
run: python setup.py sdist bdist_wheel
- name: पैकेज को PyPI पर प्रकाशित करें
run: |
twine upload dist/* \
-u __token__ \
-p ${{ secrets.PYPI_API_TOKEN }}
स्पष्टीकरण:
- यह वर्कफ़्लो तब शुरू होता है जब GitHub पर एक नई रिलीज प्रकाशित होती है।
- यह कोड को चेक आउट करता है, पाइथन सेट अप करता है, डिपेंडेंसी इंस्टॉल करता है, पैकेज बनाता है, और इसे PyPI पर अपलोड करता है।
secrets.PYPI_API_TOKENएक GitHub सीक्रेट है जो आपके PyPI API टोकन को संग्रहीत करता है। आपको इस सीक्रेट को अपनी GitHub रिपॉजिटरी सेटिंग्स में कॉन्फ़िगर करना होगा।
पाइथन पैकेज वितरण के लिए सर्वोत्तम प्रथाएँ
- व्यापक दस्तावेज़ीकरण लिखें: एक विस्तृत `README.md` फ़ाइल, साथ ही स्फिंक्स जैसे टूल का उपयोग करके API दस्तावेज़ीकरण शामिल करें। आपके पैकेज को उपयोग में आसान बनाने के लिए स्पष्ट और पूर्ण दस्तावेज़ीकरण महत्वपूर्ण है।
- यूनिट परीक्षण लिखें: अपने कोड की गुणवत्ता और विश्वसनीयता सुनिश्चित करने के लिए उसका पूरी तरह से परीक्षण करें। pytest या unittest जैसे परीक्षण ढांचे का उपयोग करें।
- PEP 8 शैली दिशानिर्देशों का पालन करें: सुसंगत और पठनीय कोड सुनिश्चित करने के लिए पाइथन एनहांसमेंट प्रपोजल 8 (PEP 8) शैली गाइड का पालन करें।
- एक लाइसेंस का उपयोग करें: यह निर्दिष्ट करने के लिए कि अन्य लोग आपके कोड का उपयोग कैसे कर सकते हैं, एक उपयुक्त ओपन-सोर्स लाइसेंस चुनें।
- अपनी डिपेंडेंसी को अद्यतित रखें: बग फिक्स, सुरक्षा पैच और नई सुविधाओं से लाभ उठाने के लिए अपने पैकेज की डिपेंडेंसी को नियमित रूप से अपडेट करें।
- एक वर्चुअल वातावरण का उपयोग करें: डिपेंडेंसी को अलग करने के लिए हमेशा एक वर्चुअल वातावरण के भीतर अपने पैकेज का विकास और परीक्षण करें।
- अंतर्राष्ट्रीयकरण (i18n) और स्थानीयकरण (l10n) पर विचार करें: यदि आपका पैकेज उपयोगकर्ता-सामना करने वाले टेक्स्ट या डेटा को संभालता है, तो इसे विभिन्न भाषाओं और क्षेत्रों के अनुकूल बनाने पर विचार करें। यह आपके संभावित उपयोगकर्ता आधार को विश्व स्तर पर बढ़ाता है। Babel जैसे उपकरण इसमें मदद कर सकते हैं।
- विभिन्न समय क्षेत्रों और मुद्राओं को संभालें: यदि आपका पैकेज तारीखों, समयों या वित्तीय लेनदेन से संबंधित है, तो दुनिया भर के विभिन्न समय क्षेत्रों और मुद्राओं के प्रति सचेत रहें। इन जटिलताओं को सही ढंग से संभालने के लिए उपयुक्त पुस्तकालयों और API का उपयोग करें।
- स्पष्ट त्रुटि संदेश प्रदान करें: जानकारीपूर्ण त्रुटि संदेश लिखें जो उपयोगकर्ताओं को यह समझने में मदद करते हैं कि क्या गलत हुआ और इसे कैसे ठीक किया जाए। यदि संभव हो तो इन त्रुटि संदेशों का विभिन्न भाषाओं में अनुवाद करें।
- पहुंच के बारे में सोचें: अपने पैकेज के इंटरफ़ेस और दस्तावेज़ीकरण को डिजाइन करते समय विकलांग उपयोगकर्ताओं पर विचार करें। यह सुनिश्चित करने के लिए कि आपका पैकेज सभी के लिए उपयोग करने योग्य है, पहुंच दिशानिर्देशों का पालन करें।
उन्नत विषय
- नेमस्पेस पैकेज: आपको एक ही पाइथन पैकेज को कई डायरेक्टरी या यहां तक कि कई वितरणों में विभाजित करने की अनुमति देता है।
- एंट्री पॉइंट: आपको उन कार्यों या वर्गों को परिभाषित करने की अनुमति देता है जिन्हें अन्य पैकेजों से या कमांड लाइन से बुलाया जा सकता है।
- डेटा फ़ाइलें: आपको अपने वितरण में गैर-पाइथन फ़ाइलों (जैसे, डेटा फ़ाइलें, कॉन्फ़िगरेशन फ़ाइलें) को शामिल करने की अनुमति देता है।
- सशर्त डिपेंडेंसी: आपको उन डिपेंडेंसी को निर्दिष्ट करने की अनुमति देता है जिनकी केवल कुछ शर्तों के तहत आवश्यकता होती है (जैसे, एक विशिष्ट ऑपरेटिंग सिस्टम पर)।
निष्कर्ष
PyPI पर अपने पाइथन पैकेज को वितरित करना दुनिया के साथ अपना काम साझा करने और पाइथन इकोसिस्टम में योगदान करने का एक शानदार तरीका है। इस गाइड में उल्लिखित चरणों और सर्वोत्तम प्रथाओं का पालन करके, आप उच्च-गुणवत्ता वाले पाइथन पैकेज बना और प्रकाशित कर सकते हैं जिन्हें इंस्टॉल करना, उपयोग करना और बनाए रखना आसान है। अपने पैकेज की सफलता सुनिश्चित करने के लिए स्पष्ट दस्तावेज़ीकरण, संपूर्ण परीक्षण और सुसंगत संस्करण प्रबंधन को प्राथमिकता देना याद रखें।